home *** CD-ROM | disk | FTP | other *** search
- 'QBASIC'de çalìƒìr
-
- 'QBX için QBX/L QBX ƒeklinde
- 'QB için QB/L QB ƒeklinde
- ' yüklenmelidir
-
- 'Her Türlü modemi bulma programì
- 'Yapìm : Gürol Demir Aºustos 1995
-
-
- CLS
- COLOR 1, 7
- LOCATE
- PRINT "C.No█Adresi█IRQ No█Yapìlan iƒlem ve sonuç█Fabrika Hìzì"
- COLOR 7, 1
-
- Bekle = 5: 'Portun tepki vermesini saniye cinsinden bekleme deºeri
-
- A$ = "103F8202F8303E8402E854220642287522085228": 'Bütün portlar bu deºiƒkende
- 'Com No+Adres+.. formatìnda
- FOR I = 1 TO 40 STEP 5
- Port$ = MID$(A$, I, 5)
- PRINT "Com"; LEFT$(Port$, 1); " "; RIGHT$(Port$, 4); " ??"
- NEXT
-
- 'ÿnterrupt (IRQ=2,3,4,5,7 INT=A,B,C,D,F) adresleri saklanìyor
- DIM Sakla(24)
- DEF SEG = 0
- FOR I = 40 TO 63
- Sakla(I - 39) = PEEK(I)
- NEXT
-
- 'Yeni interrupt rutinleri yerleƒtiriliyor
- FOR Y = 2 TO 7
- IF Y <> 6 THEN
- DEF SEG = &HB900
- RESTORE YeniKesme
- B = (Y - 2) * 20 + 11
-
- FOR I = B TO B + 17
- READ A
- POKE I, A
- NEXT
-
- POKE B + 9, Y
- DEF SEG = 0
- C = 32 + Y * 4
- POKE C, B
- POKE C + 1, 0
- POKE C + 2, 0
- POKE C + 3, &HB9
- END IF
- NEXT
-
- 'ÿnterrupt yazmacì (PIC) IRQ'larìn çalìƒmasì için ayarlanìyor
- 'IRQ6 Dìƒìnda bütün IRQ'lar aktifleƒtiriliyor.(yani IRQ2,3,4,5,7)
- FOR Y1 = 2 TO 7
- IF Y1 <> 6 THEN
- RESTORE IRQSerbest
- REDIM Oku(44)
- DEF SEG = VARSEG(Oku(0))
-
- FOR PicMask = 0 TO 44
- READ D%
- IF PicMask = 13 THEN D% = Y1
- POKE VARPTR(Oku(0)) + PicMask, D%
- NEXT PicMask
-
- CALL ABSOLUTE(VARPTR(Oku(0)))
- END IF
- NEXT
-
-
- 'Port adreslerine göre aramaya baƒlìyorum.....
- FOR I = 1 TO 40 STEP 5
-
- 'ÿnterruptlarìn yazacaºì offsetler temizleniyor
- DEF SEG = &HB900
- FOR Y = 2 TO 9
- POKE Y, 0
- NEXT
-
- COLOR 7, 1
- Port$ = MID$(A$, I + 1, 4)
- Port = VAL("&H" + Port$)
- LOCATE VAL(MID$(A$, I, 1)) + 1, 20
- PRINT "Bakìyorum"
- LOCATE VAL(MID$(A$, I, 1)) + 1, 20
-
- IF INP(Port + 1) <> 255 THEN
- 'Portda bir aygìt var hìzì 14400 Bps'e ayarlanìyor
- A = INP(Port + 3)
- OUT Port + 3, 128
- OUT Port, 115200 / 14400
- OUT Port + 3, A
-
- 'Portlarìn IRQ üretmesi için ayarlar yapìlìyor
- OUT Port + 1, 3
- OUT Port + 4, 11
-
- FOR S = 1 TO 2
- B$ = "ATZ" + CHR$(13)
- GOSUB Yolla
- NEXT
-
- 'ÿnterrupt offsetlerine bakìlìyor, Kesme oluƒmuƒ mu?
- DEF SEG = &HB900
- FOR Y = 2 TO 9
- IF PEEK(Y) <> 0 THEN LOCATE VAL(MID$(A$, I, 1)) + 1, 13: PRINT "Irq="; Y: LOCATE VAL(MID$(A$, I, 1)) + 1, 20
- NEXT
-
- GOSUB Gelen
- IF INSTR(B$, "OK") = 0 THEN
- PRINT "Baƒka bir aygìt var !"
- ELSE
- COLOR 15, 1
- PRINT "Bir modem bulundu... ";
- B$ = "ATI" + CHR$(13)
- GOSUB Yolla
- GOSUB Gelen
- IF INSTR(B$, "14400") > 1 THEN Baud$ = "14400 Bps"
- IF INSTR(B$, "2400") > 1 THEN Baud$ = "2400 Bps"
- IF INSTR(B$, "28000") > 1 THEN Baud$ = "28800 Bps"
- IF INSTR(B$, "ERROR") > 1 THEN Baud$ = "Öºrenilemedi!"
- PRINT Baud$;
- Baud$ = LTRIM$(STR$(VAL(Baud$) * 4))
- PRINT " Önerilen ("; Baud$; " Bps)"
- END IF
-
- 'Portlarìn IRQ üretimi kapatìlìyor
- OUT Port + 1, 0
- OUT Port + 4, 0
- ELSE
- PRINT "Hiç aygìt yok !!!"
- END IF
- NEXT
- 'ÿnterrupt yazmacìna eski IRQ deºerleri iade edilecek henüz yapìlmadì
-
- 'Eski interrupt adresleri iade ediliyor
- DEF SEG = 0
- FOR I = 40 TO 63
- POKE I, Sakla(I - 39)
- NEXT
-
- DEF SEG
- END
-
- Yolla:
- FOR J = 1 TO LEN(B$)
- A = ASC(MID$(B$, J, 1))
- DO
- IF (INP(Port + 5) AND 32) = 32 THEN
- OUT Port, A
- EXIT DO
- END IF
- LOOP
- NEXT
- RETURN
-
- Gelen:
- B = FIX(TIMER)
- B$ = ""
- DO
- IF (INP(Port + 5) AND 1) = 1 THEN
- B$ = B$ + CHR$(INP(Port))
- END IF
- IF FIX(TIMER) - B >= Bekle THEN EXIT DO
- IF INSTR(B$, "OK") > 0 THEN EXIT DO
- LOOP
- RETURN
-
- 'Yeni interrupt rutini
- YeniKesme:
- DATA &H50 : 'PUSH AX
- DATA &H1E : 'PUSH DS
- DATA &HB8, 0, &HB9 : 'MOV AX, B900
- DATA &H8E, &HD8 : 'MOV DS, AX
- DATA &H88, &H26, 2, 0 : 'MOV [0002], AH
- DATA &HB0, &H20 : 'MOV AL,20
- DATA &HE6, &H20 : 'MOV 20,AL
- DATA &H1F : 'POP DS
- DATA &H58 : 'POP AX
- DATA &HCF : 'IRET
-
- 'ÿnterrupt Kontrol Yazmacìnìn IRQ'ya izin verme rutini
- IRQSerbest:
- DATA &H50 : 'PUSH AX
- DATA &H53 : 'PUSH BX
- DATA &H51 : 'PUSH CX
- DATA &H1E : 'PUSH DS
- DATA &HFA : 'CLI
- DATA &HB8, 0, &HB9 : 'MOV AX,B900
- DATA &H8E, &HD8 : 'MOV DS,AX
- DATA &H31, &HC9 : 'XOR CX,CX
- DATA &HB1, 2 : 'MOV CL,02
- DATA &HBB, 1, 0 : 'MOV BX,0001
- DATA &HD3, &HE3 : 'SHL BX,CL
- DATA &HF7, &HD3 : 'NOT BX
- DATA &HE4, &HA1 : 'IN AL,A1
- DATA &HA2, 0, 0 : 'MOV [0000],AL
- DATA &H20, &HF8 : 'AND AL,BH
- DATA &HE6, &HA1 : 'OUT A1,AL
- DATA &HE4, &H21 : 'IN AL,21
- DATA &HA2, 1, 0 : 'MOV [0001],AL
- DATA &H20, &HD8 : 'AND AL,BL
- DATA &HE6, &H21 : 'OUT 21,AL
- DATA &HFB : 'STI
- DATA &H1F : 'POP DS
- DATA &H59 : 'POP CX
- DATA &H5B : 'POP BX
- DATA &H58 : 'POP AX
- DATA &HCB : 'RETF
-
-